/*
【包名:】int相关函数
【作者:】技术狼
*/
package fun

import (
	"strconv"
	"unsafe"
)

// @title: int转字符
// @param: int
// @return: string
// @description:
// @date: 2024/6/11 22:32
func IntToStr(i int) string {
	string := strconv.Itoa(i)
	return string
}

// @title: int64转string
// @param: int64
// @return: string
// @description:
// @date: 2024/6/11 22:32
func Int64ToStr(i int64) string {
	str := strconv.FormatInt(i, 10)
	return str
}

// @title: int64转int
// @param: int64
// @return: int
// @description:
// @date: 2024/6/11 22:32
func Int64ToInt(i int64) int {
	return *(*int)(unsafe.Pointer(&i))
}

// @title: int转int64
// @param: int
// @return: int64
// @description:
// @date: 2024/6/11 22:32
func IntToInt64(i int) int64 {
	return int64(i)
}

// @title: int转float64
// @param: int
// @return: float64
// @description:
// @date: 2024/6/11 22:32
func IntToFloat64(i int) float64 {
	return float64(i)
}

// @title: 判断Int是否是奇数
// @param: int
// @return: bool
// @description:
// @date: 2024/6/11 22:32
func IntIsOdd(i int) bool {
	return Int64IsOdd(int64(i))
}

// @title: 判断Int是否是偶数
// @param: int
// @return: bool
// @description:
// @date: 2024/6/11 22:32
func IntIsEven(i int) bool {
	return Int64IsEven(int64(i))
}

// @title: 判断Int64是否是奇数
// @param: int64
// @return: bool
// @description:
// @date: 2024/6/11 22:32
func Int64IsOdd(num int64) bool {
	if num%2 == 0 {
		return false
	}
	return true
}

// @title: 判断Int64是否是偶数
// @param: int64
// @return: bool
// @description:
// @date: 2024/6/11 22:32
func Int64IsEven(i int64) bool {
	if i%2 == 0 {
		return true
	}
	return false
}

// @title: 是否是int相关类型
// @param: interface
// @return: bool
// @description:
// @date: 2024/6/11 22:32
func IsInt(variable interface{}) bool {
	variableType := GetType(variable)
	if variableType == "int" || variableType == "uint" || variableType == "uint64" ||
		variableType == "int64" || variableType == "uint32" || variableType == "int32" ||
		variableType == "int8" || variableType == "uint8" {
		return true
	}
	return false
}

// @title: 是否是数字类型
// @param: interface
// @return: bool
// @description:
// @date: 2024/6/11 22:32
func IsNumeric(variable interface{}) bool {
	if IsInt(variable) || IsFloat(variable) {
		return true
	}

	if IsString(variable) {
		tmpStr, err := variable.(string)
		if err {
			_, err := strconv.Atoi(tmpStr)
			if err == nil {
				return true
			}
		}
	}
	return false
}
